Add claude-toolbox marketplace integration (Phase 1)#2
Merged
Conversation
Phase 1 design for additive claude-toolbox integration: stack-aware bundle resolution, project-scoped settings.json merge, init/add surfacing, and overlap-skip default with opt-in drop-replace path deferred to Phase 2.
Bite-sized TDD-shaped tasks covering type changes, bundle resolution, settings merge, installer, interview integration, add command (bundle and single-plugin paths), overlap remediation, generator override hook, README, and verification smoke test.
ToolSelection.toolbox, RepoSignals.hasProto, RobocoConfig.overrides.
Stack-aware resolveBundle with core/stack/signal overlays and overlap exclusion.
Adds AnalysisResult.signals.hasProto used by toolbox bundle resolution.
Writes extraKnownMarketplaces + enabledPlugins respecting explicit false.
Settings.json written first as source of truth; subprocess install is convenience for the initiating user.
Threads analysis through installTools so toolbox can read signals and path.
Default true in auto/AI; interactive prompt shows detected stack overlay.
…Result Issues raised in code review: - overlay hints derived from resolveBundle/CORE_BUNDLE (single source of truth) - prompt groups plugins by capability per design spec - parseAiResult exported and tested for toolbox default-true and explicit-false
Reads analysis from .roboco/config.json, installs bundle, updates config.
Wrap installToolbox in try/catch/finally so filesystem errors fail the spinner instead of leaking. Distinguish full-success (spinner.succeed) from partial-success (spinner.warn) based on result.success. Adds negative-path test for marketplace-add failure.
Recognizes toolbox: prefix, validates against KNOWN_PLUGINS catalog, installs a single plugin via subprocess. Overlap path is Task 10.
Drop-replace prompt records skipGeneratorOutputs override; cleanup handlers per overlapping plugin run filesystem removal where applicable.
…ceeds - Reorder so config.overrides mutation happens after writeProjectSettings, preventing half-migrated state on filesystem error. - Surface deferred-cleanup intent for no-op remediation entries. - Add regression test asserting override is not persisted when settings write fails.
generate() consults config.overrides and skips husky, ci-workflow, claude-deny-list, or roboco-block emit branches when overridden.
…lete test helper - Soften the deferred-cleanup user message to reflect Phase 1's passive don't-emit behavior (existing entries are not removed). - Add missing signals field to generator.test.ts makeAnalysis helper.
Add toolbox to Optional artifacts table and Commands table. Document the verification gate as a manual pre-merge smoke test.
…arning - Reorder installSingleToolboxPlugin so writeProjectSettings runs before destructive cleanup. Prevents the user being left with husky/CI files removed but no record of the toolbox plugin if filesystem write fails. - mergeToolboxSettings now warns when an existing marketplace entry has a non-matching source instead of silently leaving it in place.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Phase 1 integration of
jaeyeom/claude-toolboxmarketplace plugins into ROBOCO CLI. Stack-aware bundle install duringroboco init, post-initroboco add toolboxandroboco add toolbox:<plugin>, with an opt-in drop-replace path for plugins that overlap with ROBOCO's own outputs. Phase 2 (replacing ROBOCO defaults with toolbox plugins) is explicitly out of scope.docs/superpowers/specs/2026-05-04-claude-toolbox-integration-design.mddocs/superpowers/plans/2026-05-04-claude-toolbox-integration.mdWhat's added
src/core/toolbox-bundles.ts) —CORE_BUNDLE(next-action, todo, gh-issue-resolver, semgrep-review, sandbox-helpers, makefile-workflow) plus stack overlays (TS/JS → biome-vcs-integration, Go → go-dev) and signal overlays (.protofiles → protobuf-dev). Four overlap plugins held back from defaults: claude-md, gabyx-githooks-setup, git-guardrails, ci-workflow.mergeToolboxSettingsingenerator.ts) — writesextraKnownMarketplaces['claude-toolbox']andenabledPlugins['<name>@claude-toolbox'], respects explicit userfalse, warns on conflicting marketplace source.installToolbox(analysis)(installer.ts) — settings-first write, thenclaude plugin marketplace add, then per-pluginclaude plugin install. Partial-success tolerated. Settings.json written first as source of truth so a teammate runningroboco installcan retry on subprocess failure.installSingleToolboxPlugin(name, targetPath, config)— single-plugin opt-in. For overlapping plugins, prompts user to drop ROBOCO's competing output, writes settings, runs cleanup, recordsOverrideKeyinconfig.overrides.skipGeneratorOutputs.generate(...)acceptsoptions.overrides, skips emit branches matchingskipGeneratorOutputs(husky pre-commit, CI workflow, claude deny list,<roboco>block in CLAUDE.md).autoInterviewdefaultstoolbox: true;interactiveInterviewshows capability-grouped prompt with stack-aware overlay hints derived fromresolveBundle;parseAiResultdefaultstoolbox: truewhen AI omits it.roboco add toolbox(full bundle),roboco add toolbox:<plugin>(single plugin with overlap drop-replace prompt).Architecture
No new architectural concepts —
installToolboxis a peer ofinstallOMC/installHarnessin the sameinstallToolsrouter. Settings merge sits next to the existingdeepMergeSettings. Override recording (OverrideKeyunion +RobocoConfig.overrides.skipGeneratorOutputs) is the Phase 2 hand-off mechanism.Verification
enabledPluginsactivates plugins for fresh teammates without~/.claude/settings.jsonmodification — see "Verification Gate Status" in the plan doc.Process
13 implementation tasks executed via subagent-driven TDD. Each task went through spec compliance + code quality review. T7, T8, T10, T11 had follow-up commits addressing reviewer feedback before approval. A final whole-branch review surfaced two Important issues (cleanup-after-settings ordering, marketplace conflict warning), both fixed in
84b563abefore this PR.Test plan
npm test)npm run typecheck)src/core/toolbox-bundles.tsfor bundle compositionsrc/core/installer.ts:installSingleToolboxPluginfor overlap drop-replace ordering (settings → cleanup → override → subprocess)Out of scope (Phase 2)
Documented in the spec's "Out of Scope" section:
gabyx-githooks-setupby default.github/workflows/vibe-coding-check.ymltoci-workflowby defaultclaude-mdskill afterclaude /initgit-guardrailsdeny entries to ROBOCO's default deny listEach Phase 2 swap is its own decision and PR.